package com.example.androidproject;

import android.content.Context;
import android.content.res.Configuration;

import androidx.annotation.NonNull;
import androidx.multidex.MultiDexApplication;

import com.example.androidproject.api.UserInfoImpl;
import com.hyg.base.BaseLibrary;
import com.hyg.common.utils.AppUtils;
import com.hyg.common.utils.CrashHandler;
import com.hyg.common.utils.LogManager;
import com.hyg.common.utils.language.LocalManageUtil;
import com.hyg.common.utils.language.SPLanguageUtil;
import com.hyg.idea.api.ApiInterface;
import com.tencent.bugly.crashreport.CrashReport;


public class MyApp extends MultiDexApplication implements CrashHandler.OnCrashListener {
    private static MyApp mApp;

    public  static MyApp getApp() {
        return mApp;
    }

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        LocalManageUtil.onConfigurationChanged(getApplicationContext());
    }

    @Override
    protected void attachBaseContext(Context base) {
        //保存系统选择语言
        LocalManageUtil.saveSystemCurrentLanguage(base);
        super.attachBaseContext(base);
    }

    @Override
    public void onCreate() {
        super.onCreate();

        mApp = this;

        CrashHandler.getInstance().init(this).setOnCrashListener(this);
        //如果需要保存API日志到sd卡需要先初始化
        LogManager.getInstance().init(this);

        if(SPLanguageUtil.getInstance(this).getSelectLanguage() == -1){
            //默认简体中文
            LocalManageUtil.saveSelectLanguage(this, 0);
        }

        BaseLibrary.init(this);
        initBugly();
        initInterfaces();
    }

    /**
     * 初始化腾讯bug管理平台
     */
    private void initBugly() {
        /* Bugly SDK初始化
         * 参数1：上下文对象
         * 参数2：APPID，平台注册时得到,注意替换成你的appId
         * 参数3：是否开启调试模式，调试模式下会输出'CrashReport'tag的日志
         * 注意：如果您之前使用过Bugly SDK，请将以下这句注释掉。
         */
        CrashReport.UserStrategy strategy = new CrashReport.UserStrategy(getApplicationContext());
        strategy.setAppVersion(AppUtils.getAppVersionName(this));
        strategy.setAppPackageName(getPackageName());
        strategy.setAppReportDelay(20000);    //Bugly会在启动20s后联网同步数据

        /*  第三个参数为SDK调试模式开关，调试模式的行为特性如下：
            输出详细的Bugly SDK的Log；
            每一条Crash都会被立即上报；
            自定义日志将会在Logcat中输出。
            建议在测试阶段建议设置成true，发布时设置为false。*/
        CrashReport.initCrashReport(getApplicationContext(), "APPID", BuildConfig.DEBUG ,strategy);
//        CrashReport.putUserData(this, "userAccount", AppUserInfo.getInstance().getAccount());
//        CrashReport.setUserId(this,AppUserInfo.getInstance().getUserId());
    }

    private void initInterfaces(){
        ApiInterface.getInstance().setUserInfoInterface(new UserInfoImpl());
    }

    @Override
    public void onCrash(Throwable ex) {

    }
}
